package com.toolServlet;

import com.mysql.mysqlConnect;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import com.dom.info;
import com.function.createID;

public class infoManager extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*
            作为管理员最重要的灾害信息管理模板，在接受get请求上
            为了处理不同的功能，在此使用了url参数传值，通过参数
            的值来判断不同的功能，进行不同的逻辑处理。
            数据处理上，连接数据库，进行同步操作
         */
        // 获取功能属性
        String action = request.getParameter("action");
        // 连接数据库，返回数据的连接实例
        mysqlConnect connect = new mysqlConnect();
        if (action == null)
        {
            // 如果action无内容，默认展现所有的未通过事件信息
            // 将数据库信息接受处理后，返回jsp页面
            String sql = "select * from tempinfos";
            ArrayList infos = connect.selectAlltempinfo(sql);
            request.getSession().setAttribute("infos", infos);
            response.sendRedirect("checkInfo.jsp");
        }
        else if (action.equals("pass"))
        {
            // 若action为pass
            // 此处为通过事件，将传入的灾害信息写入事件数据库
            info temp = new info();
            // 获取事件ID
            int id = Integer.parseInt(request.getParameter("id"));
            // 在此为新事件创建独一无二的新ID
            createID create = new createID();
            int newId = create.getID();
            // 创建事件格式
            // 将事件信息依次从url中获取
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            // ID存入、申报人姓名获取
            temp.setId(newId);
            temp.setName(request.getParameter("name"));
            // 次生灾害事件类型获取
            temp.setType(request.getParameter("type"));
            // 灾害发生地址获取
            temp.setLocation(request.getParameter("location"));
            // 经纬度获取
            temp.setLon(Float.parseFloat(request.getParameter("lon")));
            temp.setLat(Float.parseFloat(request.getParameter("lat")));
            // 灾害发生时间获取
            try
            {
                temp.setDate(format.parse(request.getParameter("time")));
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
            // 获取次生灾害
            String type = request.getParameter("type");
            if (type.equals("earthquake"))
            {
                type = "地震";
            }
            else if (type.equals("no"))
            {
                type = "无";
            }
            else if (type.equals("waterflood"))
            {
                type = "洪水";
            }
            else if (type.equals("mud"))
            {
                type = "泥石流";
            }
            else if (type.equals("fire"))
            {
                type = "大火";
            }
            // 存入对象
            temp.setType(type);
            // 获取震感，存入对象
            String degree = request.getParameter("degree");
            if (degree.equals("no"))
            {
                degree = "无震感";
            }
            else if (degree.equals("lights"))
            {
                degree = "灯具轻微晃动";
            }
            else if (degree.equals("door"))
            {
                degree = "门窗轻微作响";
            }
            else if (degree.equals("inside"))
            {
                degree = "室内人有明显震感";
            }
            else if (degree.equals("outside"))
            {
                degree = "是外人有明显震感";
            }
            else if (degree.equals("furniture"))
            {
                degree = "家具晃动";
            }
            else if (degree.equals("people"))
            {
                degree = "站立不稳";
            }
            temp.setDegree((degree));
            // 获取民众反应，存入对象
            String reaction = request.getParameter("reaction");
            if (reaction.equals("rare"))
            {
                reaction = "极个别在户外避震";
            }
            else if (reaction.equals("some"))
            {
                reaction = "少数在户外避震";
            }
            else if (reaction.equals("more"))
            {
                reaction = "多数在户外避震";
            }
            else if (reaction.equals("most"))
            {
                reaction = "均在在户外避震";
            }
            temp.setReaction(reaction);
            // 获取建筑物破坏程度，存入对象
            temp.setDestory(Float.parseFloat(request.getParameter("destory")));
            // 获取死亡人数，存入对象
            temp.setDead(Integer.parseInt(request.getParameter("dead")));
            // 获取受伤人数，存入对象
            temp.setHurt(Integer.parseInt(request.getParameter("hurt")));
            /* 基础设施灾情信息 */
            // 电力系统
            String elec = request.getParameter("elec");
            if (elec.equals("normal"))
            {
                elec = "供电正常";
            }
            else if (elec.equals("abnormal"))
            {
                elec = "局部停电";
            }
            else if (elec.equals("broken"))
            {
                elec = "大范围停电";
            }
            temp.setElec(elec);
            // 通信系统
            String concat = request.getParameter("concat");
            if (concat.equals("normal"))
            {
                concat = "通信正常";
            }
            else if (concat.equals("abnormal"))
            {
                concat = "局部中断";
            }
            else if (concat.equals("broken"))
            {
                concat = "大范围中断";
            }
            temp.setConcat(concat);
            // 交通系统
            String traffic = request.getParameter("traffic");
            if (traffic.equals("normal"))
            {
                traffic = "通行正常";
            }
            else if (traffic.equals("abnormal"))
            {
                traffic = "局部中断";
            }
            else if (traffic.equals("broken"))
            {
                traffic = "大范围中断";
            }
            temp.setTraffic(traffic);
            // 供水系统
            String water = request.getParameter("water");
            if (water.equals("normal"))
            {
                water = "供水正常";
            }
            else if (water.equals("abnormal"))
            {
                water = "局部停水";
            }
            else if (water.equals("broken"))
            {
                water = "大范围停水";
            }
            temp.setWater(water);
            // 供气系统
            String gas = request.getParameter("gas");
            if (gas.equals("normal"))
            {
                gas = "供气正常";
            }
            else if (gas.equals("abnormal"))
            {
                gas = "局部停气";
            }
            else if (gas.equals("broken"))
            {
                gas = "大范围停气";
            }
            temp.setGas(gas);
            // 救灾物资需求度
            temp.setAid(request.getParameter("aid"));
            /*
                此处将新事件写入灾害事件数据表中
                将此事件从待审核的事件表中删除
             */
            connect.insertInfo(temp);
            connect.deleteTempInfo(String.valueOf(id));
            // 此处获取目前页面展示的待审核事件
            // 通过ID比对，删除通过的事件
            // 做到数据库与前端页面的同步数据信息处理
            ArrayList<info> infos = (ArrayList<info>) request.getSession().getAttribute("infos");
            for (int i=0; i<infos.size(); i++)
            {
                info one = infos.get(i);
                if (one.getId() == id)
                {
                    infos.remove(i);
                }
            }
            // 设置新的事件数据信息，返回jsp页面
            request.getSession().setAttribute("infos", infos);
            response.sendRedirect("checkInfo.jsp");
        }
        else if (action.equals("fail"))
        {
            // 若action为pass，审核失败，删除事件
            // 获取事件ID
            int id = Integer.parseInt(request.getParameter("id"));
            // 获取当前页面的待审核事件信息，，通过ID对比，删除事件
            // 将新的事件信息处理录入
            ArrayList<info> infos = (ArrayList<info>) request.getSession().getAttribute("infos");
            for (int i=0; i<infos.size(); i++)
            {
                info one = infos.get(i);
                if (one.getId() == id)
                {
                    infos.remove(i);
                }
            }
            // 此处，通过ID在数据库中删除事件
            connect.deleteTempInfo(String.valueOf(id));
            request.getSession().setAttribute("infos", infos);
            response.sendRedirect("checkInfo.jsp");
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*
            灾害事件管理不进行post请求
            自动跳转到get请求
         */
        super.doGet(request, response);
    }

}
